/**
 * 一、any：任意类型
 * any 类型的主要意义，其实就是为了表示一个无拘无束的“任意类型”，它能兼容所有类型，也能够被所有类型兼容
 * 
 * 1.一个被标记为 any 类型的参数可以接受任意类型的值
 * 2.标记为 具体类型的变量 也可以接受任何 any 类型的值
 * 3.可以在 any 类型变量上任意地进行操作，包括赋值、访问、方法调用等等，此时可以认为类型推导与检查是被完全禁用的
 * 4.除了显式的标记一个变量或参数为 any，在某些情况下声明的变量/参数也会被隐式地推导为 any。
 * 
*/
function log(message?: any, ...optionalParams: any[]): void {
}

// 1.被标记为 any 类型的变量可以拥有任意类型的值
let anyVar: any = "hanxuming";
anyVar = false;
anyVar = "hanxuming";
anyVar = {
    site: "juejin"
};
anyVar = () => { }

// 2.标记为具体类型的变量也可以接受任何 any 类型的值
const val1: string = anyVar;
const val2: number = anyVar;
const val3: () => {} = anyVar;
const val4: {} = anyVar;

//3.可以在 any 类型变量上任意地进行操作
let anyVarA: any = null;
anyVar.foo.bar.baz();
anyVar[0][1][2].prop1;

// 4.被隐式地推导为：any
let foo;
// 4.被隐式地推导为 any：foo、bar 均为 any
//在 tsconfig 中启用了 noImplicitAny 时会报错，
//可以显式为这两个参数指定 any 类型，或者暂时关闭这一配置（不推荐）
function func(foo, bar) { }


//export {}：解决“无法重新声明块范围变量”错误提示问题
export { }